Computer hardware and software are ubiquitous nowadays. Once the province of a few privileged individuals or institutions, computers are now used for both work and entertainment by ordinary people. In the work environment, computers are often networked to share common resources and to facilitate the sharing of information. It is indeed an anomaly these days to find an office environment without some type of networked computing arrangement, whereby a plurality of computers are interconnected to share a common resource (such as a large file server) or to exchange information (such as emails, files, etc.).
Computers comprise both hardware and software. In a typical modern computer, there may exist dozens or hundreds of software programs, each implementing a particular set of functionalities and having particular capabilities. From time-to-time, these software packages need to be updated with more updated code and/or data. For example, most computers these days are protected by some type of anti-malware software to guard against the threat malware (e.g., spam emails, viruses, spywares, etc.) The anti-malware software typically employs a definition file, which may for example contain the fingerprint of viruses. In this example, the definition file needs to be updated frequently to ensure that the protection afforded by the anti-malware software can stay ahead of the viruses being released. From time to time, even the executable code (e.g., engine) of the anti-malware software needs to be updated in order to, for example, improve the virus-scanning engine's ability to detect and neutralize sophisticated viruses.
Updating software (defined to herein as updating the executable code and/or updating the data files employed by the executable code during execution and/or configuration) has been viewed as a burdensome task for both the network administrator and the resources of the network. While significant progresses have been made in automating the task of updating software, certain bottlenecks remain. In an example scenario, one or more specialized update servers are employed to update the software residing in networked client computers. Each networked client computer is loaded with an update agent, whose task is to access the update servers to ascertain whether there exist downloadable update packages for the software in each respective computer. By providing the specialized update server with the downloadable update package, one can count on the update agents executing in the client computers to automatically obtain the downloadable update package from the update servers to update their own software, if need.
Although automation has made network administration less tedious, such automation has resulted in degraded network performance. Consider, for example, a network having 500 client computers, all coupled to receive update information and update packages from a few update servers. These 500 client computers continually query the update servers to ascertain whether a downloadable update package exists Such frequent and continual queries represent a drain on the I/O bandwidth of the update servers, rendering the servers less capable of performing other network I/O tasks. Further, if the update server is provided with a new downloadable update package, the various client computers would attempt to download the update package in order to update their own software. If the update package is sizable, e.g., tens or hundreds of megabytes, the attempt by a large number of client computers to download the update package from the update server would create a network bandwidth bottleneck and may cause other network traffic to slow down or may even render it impossible to use the network for any other purposes for quite some time.